[Coding015] LeetCode 23

Merge k Sorted Lists

Ben 2023/08/04

More coding records

Get the knowledge flowing and circulating! :)

目录

本题收获

2的幂次是一个很有意思、且值得深入研究的一个问题。

题目:23. Merge k Sorted Lists

You are given an array of k linked-lists lists, each linked-list is sorted in ascending order.

Merge all the linked-lists into one sorted linked-list and return it.

Example 1:

Example 2:

Example 3:

Constraints:


代码1(配 · 手绘过程图)

mergelink01

mergelink02

代码解读

本题有两个弯弯绕的地方:

❶ 每次循环的时候,循环体本身的i是如何变化的? 循环体内部的i又有什么作用?

  • 循环体内,(MergeTwoLists简写为M),每次合并的对象M(i, i + xx);

  • 循环体,for (i = 0; i ... ; i = i + yy)

❷ pace的变化,是如何实现2路、4路、8路归并的?

复杂度分析

while循环的时间复杂度(Time complexity):O(logk), k is the number of linked lists.

for循环内,就是把所有链表中的numbers整合在一起,如果所有numbers的数量是n,那么for循环的时间复杂度是O(n)

所以,合并起来是:O(nlogk)

附:功能代码(合并两个有序链表)

 


 

知识点积累 (Java)

  1. 原本想使用2x这样的形式来实现2的幂次计算。

    pow() 方法用于返回第一个参数的第二个参数次方。

    语法

    Demo: 2x

    参数

    • base -- 任何原生数据类型。

    • exponent -- 任何原生数据类型。

    但是发现,这个发现返回值是double,没法作为下标来索引数组的元素。所以放弃了。

    (放弃的另一个原因还有,for循环体条件中i变化,和for循环内对i参数的变化,相差了一个2倍,不太好控制具体的变化,后来发现用累乘方式实现比较科学,所以放弃了原有的代码)

     


     

    复杂代码如下(同样可以提交通过)